package com.atguigu.yygh.order.controller;


import com.atguigu.common.result.Result;
import com.atguigu.yygh.order.service.PaymentInfoService;
import com.atguigu.yygh.order.service.WeixinService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

@RestController
@RequestMapping("/api/order/wx")
public class WeixinController {

    @Autowired
    WeixinService weixinService;

    @Autowired
    PaymentInfoService paymentInfoService;

    /**
     * 点击支付按钮后，被调用，用于获取codeUrl
     *
     * 需求：根据orderId（平台端的订单id）创建一个codeUrl；
     * 为了避免微信端接口频繁被调用，保证一个订单对应的codeUrl，五分钟之内使用的是同一个（微信端的接口不用再次去调用），暂存到redis中
     *      public enum PaymentStatusEnum {
         *     UNPAID(1,"支付中"),
         *     PAID(2,"已支付");
     * 为当前订单创建一个支付记录（状态默认为1）,并且，每个订单最多有一个支付记录。
     * 返回值格式 {data:{codeUrl:xxxxx}}
     * @return
     */
    @GetMapping("/createNative/{orderId}")
    public Result createNative(@PathVariable Long orderId){

        Map map = weixinService.createNative(orderId);// map = { codeUrl:'xxx' }
        return Result.ok().data(map);
    }


    /**
     * 前端用于检测支付状态（前端定时器，每隔2秒发一次请求）
     * @param orderId
     * @return
     */
    @GetMapping("queryStatus/{orderId}")
    public Result queryStatus(@PathVariable Long orderId){

        //调用微信端“查询订单接口”，返回微信端的所有数据
        Map map = weixinService.queryStatus(orderId);

        if (map==null){
            return Result.error().message("支付出错");
        }

        Object trade_state = map.get("trade_state");
        if(!StringUtils.isEmpty(trade_state) && "SUCCESS".equals(trade_state)){

            //支付成功后的需求：
            //1、调用医院端的“更新支付状态”接口，将医院端的订单状态改成1已支付`yygh_manage`.`order_info`
            //2、将平台端的订单状态改成1已支付
            //3、 修改PaymentInfo中的4个字段
            //    将平台端订单的支付记录的状态改成2已支付
            //   为该订单的支付记录中的  trade_no（微信支付订单号transaction_id）  callback_time（支付成功的时间）  callback_content（map.toString）
            paymentInfoService.paySuccess(orderId,map);


            //支付成功
            return Result.ok().message("支付成功");//前端的then中根据message属性值，就可以判断出是否支付成功
        }else{
            return Result.ok().message("未支付成功");
        }
    }


}
